home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / DefaultDesktopManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  8.4 KB  |  461 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Point;
  9. import java.awt.Rectangle;
  10. import java.beans.PropertyVetoException;
  11. import java.io.Serializable;
  12.  
  13. public class DefaultDesktopManager implements DesktopManager, Serializable {
  14.    static final String PREVIOUS_BOUNDS_PROPERTY = "previousBounds";
  15.    static final String HAS_BEEN_ICONIFIED_PROPERTY = "wasIconOnce";
  16.    static final int DEFAULT_DRAG_MODE = 0;
  17.    static final int OUTLINE_DRAG_MODE = 1;
  18.    static final int FASTER_DRAG_MODE = 2;
  19.    int dragMode = 0;
  20.    private static JInternalFrame currentActiveFrame = null;
  21.    private transient Rectangle currentBounds = null;
  22.    private transient Graphics desktopGraphics = null;
  23.    private transient Rectangle desktopBounds = null;
  24.    private transient Rectangle[] floatingItems = new Rectangle[0];
  25.    private transient Point currentLoc = null;
  26.  
  27.    public void activateFrame(JInternalFrame var1) {
  28.       Container var2 = ((Component)var1).getParent();
  29.       if (var2 == null) {
  30.          var2 = var1.getDesktopIcon().getParent();
  31.          if (var2 == null) {
  32.             return;
  33.          }
  34.       }
  35.  
  36.       if (currentActiveFrame == null) {
  37.          currentActiveFrame = var1;
  38.       } else if (currentActiveFrame != var1) {
  39.          if (currentActiveFrame.isSelected()) {
  40.             try {
  41.                currentActiveFrame.setSelected(false);
  42.             } catch (PropertyVetoException var3) {
  43.             }
  44.          }
  45.  
  46.          currentActiveFrame = var1;
  47.       }
  48.  
  49.       var1.moveToFront();
  50.    }
  51.  
  52.    public void beginDraggingFrame(JComponent var1) {
  53.       this.setupDragMode(var1);
  54.       if (this.dragMode == 2) {
  55.          this.floatingItems = this.findFloatingItems(var1);
  56.          this.currentBounds = ((Component)var1).getBounds();
  57.          this.desktopBounds = ((Component)var1).getParent().getBounds();
  58.          this.desktopBounds.x = 0;
  59.          this.desktopBounds.y = 0;
  60.          this.desktopGraphics = ((Component)var1).getParent().getGraphics();
  61.          ((JInternalFrame)var1).isDragging = true;
  62.       }
  63.  
  64.    }
  65.  
  66.    public void beginResizingFrame(JComponent var1, int var2) {
  67.       this.setupDragMode(var1);
  68.    }
  69.  
  70.    public void closeFrame(JInternalFrame var1) {
  71.       if (((Component)var1).getParent() != null) {
  72.          Container var2 = ((Component)var1).getParent();
  73.          var2.remove(var1);
  74.          ((Component)var2).repaint(((JComponent)var1).getX(), ((JComponent)var1).getY(), ((JComponent)var1).getWidth(), ((JComponent)var1).getHeight());
  75.       }
  76.  
  77.       this.removeIconFor(var1);
  78.       if (this.getPreviousBounds(var1) != null) {
  79.          this.setPreviousBounds(var1, (Rectangle)null);
  80.       }
  81.  
  82.       if (this.wasIcon(var1)) {
  83.          this.setWasIcon(var1, (Boolean)null);
  84.       }
  85.  
  86.    }
  87.  
  88.    public void deactivateFrame(JInternalFrame var1) {
  89.       if (currentActiveFrame == var1) {
  90.          currentActiveFrame = null;
  91.       }
  92.  
  93.    }
  94.  
  95.    public void deiconifyFrame(JInternalFrame var1) {
  96.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  97.       if (((Component)var2).getParent() != null) {
  98.          ((Component)var2).getParent().add(var1);
  99.          this.removeIconFor(var1);
  100.  
  101.          try {
  102.             var1.setSelected(true);
  103.          } catch (PropertyVetoException var3) {
  104.          }
  105.       }
  106.  
  107.    }
  108.  
  109.    public void dragFrame(JComponent var1, int var2, int var3) {
  110.       if (this.dragMode == 1) {
  111.          JDesktopPane var4 = this.getDesktopPane(var1);
  112.          if (var4 != null) {
  113.             Graphics var5 = ((JComponent)var4).getGraphics();
  114.             var5.setXORMode(Color.white);
  115.             if (this.currentLoc != null) {
  116.                var5.drawRect(this.currentLoc.x, this.currentLoc.y, var1.getWidth() - 1, var1.getHeight() - 1);
  117.             }
  118.  
  119.             var5.drawRect(var2, var3, var1.getWidth() - 1, var1.getHeight() - 1);
  120.             this.currentLoc = new Point(var2, var3);
  121.             var5.setPaintMode();
  122.          }
  123.       } else if (this.dragMode == 2) {
  124.          this.dragFrameFaster(var1, var2, var3);
  125.       } else {
  126.          this.setBoundsForFrame(var1, var2, var3, var1.getWidth(), var1.getHeight());
  127.       }
  128.  
  129.    }
  130.  
  131.    private void dragFrameFaster(JComponent var1, int var2, int var3) {
  132.       Rectangle var4 = new Rectangle(this.currentBounds.x, this.currentBounds.y, this.currentBounds.width, this.currentBounds.height);
  133.       this.currentBounds.x = var2;
  134.       this.currentBounds.y = var3;
  135.       if (this.isFloaterCollision(var4, this.currentBounds)) {
  136.          this.setBoundsForFrame(var1, var2, var3, var1.getWidth(), var1.getHeight());
  137.       } else {
  138.          this.emergencyCleanup(var1);
  139.          Rectangle var5 = var4.intersection(this.desktopBounds);
  140.          this.desktopGraphics.copyArea(var5.x, var5.y, var5.width, var5.height, var2 - var4.x, var3 - var4.y);
  141.          ((Component)var1).setBounds(this.currentBounds);
  142.          RepaintManager var6 = RepaintManager.currentManager(var1);
  143.          JComponent var7 = (JComponent)((Component)var1).getParent();
  144.          var6.markCompletelyClean(var7);
  145.          var6.markCompletelyClean(var1);
  146.          Object var8 = null;
  147.          Rectangle[] var11;
  148.          if (var4.intersects(this.currentBounds)) {
  149.             var11 = SwingUtilities.computeDifference(var4, this.currentBounds);
  150.          } else {
  151.             var11 = new Rectangle[]{var4};
  152.          }
  153.  
  154.          for(int var9 = 0; var9 < var11.length; ++var9) {
  155.             var7.paintImmediately(var11[var9]);
  156.          }
  157.  
  158.          if (!var5.equals(var4)) {
  159.             var11 = SwingUtilities.computeDifference(var4, this.desktopBounds);
  160.  
  161.             for(int var10 = 0; var10 < var11.length; ++var10) {
  162.                var11[var10].x += var2 - var4.x;
  163.                var11[var10].y += var3 - var4.y;
  164.                ((JInternalFrame)var1).isDragging = false;
  165.                var7.paintImmediately(var11[var10]);
  166.                ((JInternalFrame)var1).isDragging = true;
  167.             }
  168.          }
  169.  
  170.       }
  171.    }
  172.  
  173.    private void emergencyCleanup(JComponent var1) {
  174.       if (((JInternalFrame)var1).danger) {
  175.          SwingUtilities.invokeLater(new 1(var1));
  176.          ((JInternalFrame)var1).danger = false;
  177.       }
  178.  
  179.    }
  180.  
  181.    public void endDraggingFrame(JComponent var1) {
  182.       if (this.dragMode == 1 && this.currentLoc != null) {
  183.          this.setBoundsForFrame(var1, this.currentLoc.x, this.currentLoc.y, var1.getWidth(), var1.getHeight());
  184.          this.currentLoc = null;
  185.       } else if (this.dragMode == 2) {
  186.          this.currentBounds = null;
  187.          this.desktopGraphics = null;
  188.          this.desktopBounds = null;
  189.          ((JInternalFrame)var1).isDragging = false;
  190.       }
  191.  
  192.    }
  193.  
  194.    public void endResizingFrame(JComponent var1) {
  195.       if (this.dragMode == 1 && this.currentBounds != null) {
  196.          this.setBoundsForFrame(var1, this.currentBounds.x, this.currentBounds.y, this.currentBounds.width, this.currentBounds.height);
  197.          this.currentBounds = null;
  198.       }
  199.  
  200.    }
  201.  
  202.    private Rectangle[] findFloatingItems(JComponent var1) {
  203.       Container var2 = ((Component)var1).getParent();
  204.       Component[] var3 = var2.getComponents();
  205.       int var4 = 0;
  206.  
  207.       for(var4 = 0; var4 < var3.length && var3[var4] != var1; ++var4) {
  208.       }
  209.  
  210.       Rectangle[] var5 = new Rectangle[var4];
  211.  
  212.       for(int var7 = 0; var7 < var5.length; ++var7) {
  213.          var5[var7] = var3[var7].getBounds();
  214.       }
  215.  
  216.       return var5;
  217.    }
  218.  
  219.    protected Rectangle getBoundsForIconOf(JInternalFrame var1) {
  220.       Container var2 = ((Component)var1).getParent();
  221.       Rectangle var3 = ((Component)var2).getBounds();
  222.       Component[] var4 = var2.getComponents();
  223.       JInternalFrame.JDesktopIcon var5 = var1.getDesktopIcon();
  224.       Dimension var6 = ((JComponent)var5).getPreferredSize();
  225.       Rectangle var7 = null;
  226.       JInternalFrame.JDesktopIcon var8 = null;
  227.       int var9 = 0;
  228.       int var10 = var3.height - var6.height;
  229.       int var11 = var6.width;
  230.       int var12 = var6.height;
  231.       boolean var13 = false;
  232.  
  233.       while(!var13) {
  234.          var7 = new Rectangle(var9, var10, var11, var12);
  235.          var13 = true;
  236.  
  237.          for(int var14 = 0; var14 < var4.length; ++var14) {
  238.             if (var4[var14] instanceof JInternalFrame) {
  239.                var8 = ((JInternalFrame)var4[var14]).getDesktopIcon();
  240.             } else if (var4[var14] instanceof JInternalFrame.JDesktopIcon) {
  241.                var8 = (JInternalFrame.JDesktopIcon)var4[var14];
  242.             }
  243.  
  244.             if (!var8.equals(var5) && var7.intersects(((Component)var8).getBounds())) {
  245.                var13 = false;
  246.                break;
  247.             }
  248.          }
  249.  
  250.          var9 += ((Component)var8).getBounds().width;
  251.          if (var9 + var11 > var3.width) {
  252.             var9 = 0;
  253.             var10 -= var12;
  254.          }
  255.       }
  256.  
  257.       return var7;
  258.    }
  259.  
  260.    JDesktopPane getDesktopPane(JComponent var1) {
  261.       JDesktopPane var2 = null;
  262.       Container var3 = ((Component)var1).getParent();
  263.  
  264.       while(var2 == null) {
  265.          if (var3 instanceof JDesktopPane) {
  266.             var2 = (JDesktopPane)var3;
  267.          } else {
  268.             if (var3 == null) {
  269.                break;
  270.             }
  271.  
  272.             var3 = ((Component)var3).getParent();
  273.          }
  274.       }
  275.  
  276.       return var2;
  277.    }
  278.  
  279.    protected Rectangle getPreviousBounds(JInternalFrame var1) {
  280.       return (Rectangle)((JComponent)var1).getClientProperty("previousBounds");
  281.    }
  282.  
  283.    public void iconifyFrame(JInternalFrame var1) {
  284.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  285.       if (!this.wasIcon(var1)) {
  286.          Rectangle var4 = this.getBoundsForIconOf(var1);
  287.          ((Component)var2).setBounds(var4.x, var4.y, var4.width, var4.height);
  288.          this.setWasIcon(var1, Boolean.TRUE);
  289.       }
  290.  
  291.       Container var3 = ((Component)var1).getParent();
  292.       if (var3 instanceof JLayeredPane) {
  293.          JLayeredPane var7 = (JLayeredPane)var3;
  294.          int var5 = JLayeredPane.getLayer(var1);
  295.          JLayeredPane.putLayer(var2, var5);
  296.       }
  297.  
  298.       var3.remove(var1);
  299.       var3.add(var2);
  300.       ((Component)var3).repaint(((JComponent)var1).getX(), ((JComponent)var1).getY(), ((JComponent)var1).getWidth(), ((JComponent)var1).getHeight());
  301.  
  302.       try {
  303.          var1.setSelected(false);
  304.       } catch (PropertyVetoException var6) {
  305.       }
  306.  
  307.    }
  308.  
  309.    private boolean isFloaterCollision(Rectangle var1, Rectangle var2) {
  310.       if (this.floatingItems.length == 0) {
  311.          return false;
  312.       } else {
  313.          for(int var3 = 0; var3 < this.floatingItems.length; ++var3) {
  314.             boolean var4 = var1.intersects(this.floatingItems[var3]);
  315.             if (var4) {
  316.                return true;
  317.             }
  318.  
  319.             boolean var5 = var2.intersects(this.floatingItems[var3]);
  320.             if (var5) {
  321.                return true;
  322.             }
  323.          }
  324.  
  325.          return false;
  326.       }
  327.    }
  328.  
  329.    public void maximizeFrame(JInternalFrame var1) {
  330.       Rectangle var2;
  331.       if (!var1.isIcon()) {
  332.          this.setPreviousBounds(var1, ((Component)var1).getBounds());
  333.          var2 = ((Component)var1).getParent().getBounds();
  334.       } else {
  335.          Container var3 = var1.getDesktopIcon().getParent();
  336.          if (var3 == null) {
  337.             return;
  338.          }
  339.  
  340.          var2 = ((Component)var3).getBounds();
  341.  
  342.          try {
  343.             var1.setIcon(false);
  344.          } catch (PropertyVetoException var5) {
  345.          }
  346.       }
  347.  
  348.       this.setBoundsForFrame(var1, 0, 0, var2.width, var2.height);
  349.  
  350.       try {
  351.          var1.setSelected(true);
  352.       } catch (PropertyVetoException var4) {
  353.       }
  354.  
  355.       this.removeIconFor(var1);
  356.    }
  357.  
  358.    public void minimizeFrame(JInternalFrame var1) {
  359.       if (this.getPreviousBounds(var1) != null) {
  360.          Rectangle var2 = this.getPreviousBounds(var1);
  361.          this.setPreviousBounds(var1, (Rectangle)null);
  362.  
  363.          try {
  364.             var1.setSelected(true);
  365.          } catch (PropertyVetoException var4) {
  366.          }
  367.  
  368.          if (var1.isIcon()) {
  369.             try {
  370.                var1.setIcon(false);
  371.             } catch (PropertyVetoException var3) {
  372.             }
  373.          }
  374.  
  375.          this.setBoundsForFrame(var1, var2.x, var2.y, var2.width, var2.height);
  376.       }
  377.  
  378.       this.removeIconFor(var1);
  379.    }
  380.  
  381.    public void openFrame(JInternalFrame var1) {
  382.       if (var1.getDesktopIcon().getParent() != null) {
  383.          var1.getDesktopIcon().getParent().add(var1);
  384.          this.removeIconFor(var1);
  385.       }
  386.  
  387.    }
  388.  
  389.    protected void removeIconFor(JInternalFrame var1) {
  390.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  391.       Container var3 = ((Component)var2).getParent();
  392.       if (var3 != null) {
  393.          var3.remove(var2);
  394.          ((Component)var3).repaint(((JComponent)var2).getX(), ((JComponent)var2).getY(), ((JComponent)var2).getWidth(), ((JComponent)var2).getHeight());
  395.       }
  396.  
  397.    }
  398.  
  399.    public void resizeFrame(JComponent var1, int var2, int var3, int var4, int var5) {
  400.       if (this.dragMode != 0 && this.dragMode != 2) {
  401.          JDesktopPane var6 = this.getDesktopPane(var1);
  402.          if (var6 != null) {
  403.             Graphics var7 = ((JComponent)var6).getGraphics();
  404.             var7.setXORMode(Color.white);
  405.             if (this.currentBounds != null) {
  406.                var7.drawRect(this.currentBounds.x, this.currentBounds.y, this.currentBounds.width - 1, this.currentBounds.height - 1);
  407.             }
  408.  
  409.             var7.drawRect(var2, var3, var4 - 1, var5 - 1);
  410.             this.currentBounds = new Rectangle(var2, var3, var4, var5);
  411.             var7.setPaintMode();
  412.          }
  413.       } else {
  414.          this.setBoundsForFrame(var1, var2, var3, var4, var5);
  415.       }
  416.  
  417.    }
  418.  
  419.    public void setBoundsForFrame(JComponent var1, int var2, int var3, int var4, int var5) {
  420.       boolean var6 = var1.getWidth() != var4 || var1.getHeight() != var5;
  421.       ((Component)var1).setBounds(var2, var3, var4, var5);
  422.       if (var6) {
  423.          ((Container)var1).validate();
  424.       }
  425.  
  426.    }
  427.  
  428.    protected void setPreviousBounds(JInternalFrame var1, Rectangle var2) {
  429.       if (var2 != null) {
  430.          ((JComponent)var1).putClientProperty("previousBounds", var2);
  431.       }
  432.  
  433.    }
  434.  
  435.    protected void setWasIcon(JInternalFrame var1, Boolean var2) {
  436.       if (var2 != null) {
  437.          ((JComponent)var1).putClientProperty("wasIconOnce", var2);
  438.       }
  439.  
  440.    }
  441.  
  442.    private void setupDragMode(JComponent var1) {
  443.       JDesktopPane var2 = this.getDesktopPane(var1);
  444.       if (var2 != null) {
  445.          String var3 = (String)((JComponent)var2).getClientProperty("JDesktopPane.dragMode");
  446.          if (var3 != null && var3.equals("outline")) {
  447.             this.dragMode = 1;
  448.          } else if (var3 != null && var3.equals("faster") && var1 instanceof JInternalFrame) {
  449.             this.dragMode = 2;
  450.          } else {
  451.             this.dragMode = 0;
  452.          }
  453.       }
  454.  
  455.    }
  456.  
  457.    protected boolean wasIcon(JInternalFrame var1) {
  458.       return ((JComponent)var1).getClientProperty("wasIconOnce") == Boolean.TRUE;
  459.    }
  460. }
  461.